]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
perf-helper: Add content for custom drawing
authorFlorian Müllner <fmuellner@gnome.org>
Thu, 5 Dec 2019 13:12:47 +0000 (14:12 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 5 Dec 2019 15:51:00 +0000 (16:51 +0100)
Drawing windows got a lot more involved with the advent of client-side
decorations. Instead of accounting for visible and invisible borders,
titlebar and shadows when necessary, just add an empty child for the
custom drawing.

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/887

src/shell-perf-helper.c

index f115dcbdc81dac7c7807b92c76c15ee927e31016..ba1754e02c15f64d250154b53dee07ee9701bd81 100644 (file)
@@ -119,9 +119,9 @@ on_window_map_event (GtkWidget   *window,
 }
 
 static gboolean
-on_window_draw (GtkWidget  *window,
-               cairo_t    *cr,
-                WindowInfo *info)
+on_child_draw (GtkWidget  *window,
+               cairo_t    *cr,
+               WindowInfo *info)
 {
   cairo_rectangle_int_t allocation;
   double x_offset, y_offset;
@@ -203,6 +203,7 @@ create_window (int      width,
                gboolean redraws)
 {
   WindowInfo *info;
+  GtkWidget *child;
 
   info = g_new0 (WindowInfo, 1);
   info->width = width;
@@ -218,10 +219,13 @@ create_window (int      width,
   info->pending = TRUE;
   info->start_time = -1;
 
+  child = g_object_new (GTK_TYPE_BOX, "visible", TRUE, "app-paintable", TRUE, NULL);
+  gtk_container_add (GTK_CONTAINER (info->window), child);
+
   gtk_widget_set_size_request (info->window, width, height);
   gtk_widget_set_app_paintable (info->window, TRUE);
   g_signal_connect (info->window, "map-event", G_CALLBACK (on_window_map_event), info);
-  g_signal_connect (info->window, "draw", G_CALLBACK (on_window_draw), info);
+  g_signal_connect (child, "draw", G_CALLBACK (on_child_draw), info);
   gtk_widget_show (info->window);
 
   if (info->redraws)